package cn.edu.fzu.delivery.mapper;

import cn.edu.fzu.delivery.domain.entity.Courier;
import cn.edu.fzu.delivery.domain.enums.CourierStatusEnum;
import cn.edu.fzu.delivery.domain.enums.CourierTypeEnum;
import cn.edu.fzu.delivery.domain.enums.UrgencyEnum;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 快递管理
 *
 * @author fangxin
 * @date 2022/11/8
 */
public interface CourierMapper {

    /**
     * 查询快递
     *
     * @param sender 寄件人地址id
     * @param receiver 收件人地址id
     * @param type 类型
     * @param status 状态
     * @param urgency 紧急程度
     * @param startTime 寄件开始时间
     * @param endTime 寄件结束时间
     * @return
     */
    List<Courier> list(@Param("senderList") List<Long> sender, @Param("receiverList") List<Long> receiver,
                       @Param("type") CourierTypeEnum type, @Param("status") CourierStatusEnum status,
                       @Param("urgency") UrgencyEnum urgency, @Param("startTime") String startTime,
                       @Param("endTime") String endTime);


    /** 根据id查询快递 **/
    Courier getById(@Param("id") Long id);


    /** 根据快递单号查询快递 **/
    Courier getByCourierId(@Param("courierId") String courierId);


    /** 根据快递单号批量查询 **/
    List<Courier> listByCourierIds(@Param("courierIds") List<String> courierIds);


    /** 添加快递 **/
    void insert(@Param("courierId") String courierId, @Param("sendAddressId") Long sendAddressId,
                @Param("receiveAddressId") Long receiveAddressId, @Param("type") CourierTypeEnum type,
                @Param("status") CourierStatusEnum status, @Param("urgency") UrgencyEnum urgency);


    /** 修改快递 **/
    void update(@Param("courierId") String courierId, @Param("weight") Double weight, @Param("price") BigDecimal price,
                @Param("status") CourierStatusEnum status, @Param("logisticsId") Long logisticsId,
                @Param("endTime") String endTime);


    /** 根据快递类别查询快递单价 **/
    BigDecimal queryPrice(@Param("type") CourierTypeEnum type);

}
